package cn.itcast.dao;

import cn.itcast.pojo.Permission;
import cn.itcast.pojo.Role;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;

import java.util.Set;

public interface RoleDao {

    /**
     * 通过条件筛选角色
     *
     * @param queryString 查询字符串
     * @return {@link Page<Role>}
     */
    public Page<Role> findRoleByCondition(String queryString);

    /**
     * 通过id删除角色
     *
     * @param id id
     * @return {@link Integer}
     */
    Integer deleteRoleById(Integer id);

    /**
     * 找到角色通过id
     *
     * @param id id
     * @return {@link Role}
     */
    Role findRoleById(Integer id);

    /**
     * 通过角色id找到菜单id
     *
     * @param id id
     * @return {@link Integer[]}
     */
    Integer[] findMenuIdByRoleId(Integer id);

    /**
     * 通过角色id找到权限id
     *
     * @param id id
     * @return {@link Integer[]}
     */
    Integer[] findPermissionIdByRoleId(Integer id);

    /**
     * 添加角色和权限
     *
     * @param permissionId 权限id
     */
    void addRoleAndPermission(@Param("roleId") Integer roleId , @Param("permissionId") Integer permissionId);

    /**
     * 添加角色和菜单
     *
     * @param roleId    id
     * @param menuId 菜单id
     */
    void addRoleAndMenu(@Param("roleId") Integer roleId, @Param("menuId") Integer menuId);

    /**
     * 添加角色
     *
     * @param role 角色
     */
    void addRole(Role role);

    /**
     * 更新的作用
     *
     * @param role 角色
     */
    void updateRole(Role role);

    /**
     * 删除角色权限通过角色id
     *
     * @param id id
     */
    void deleteRolePermission(Integer id);

    /**
     * 删除角色菜单通过角色id
     *
     * @param id id
     */
    void deleteRoleMenu(Integer id);

    /**
     * 找到权限  通过角色id
     *
     * @param id id
     * @return {@link Set<Permission>}
     */
    Set<Permission> findPermissionSetByRoleId(Integer id);
}
